home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Bavarian
/
Bavarian #176 (19xx)(APS Electronic).zip
/
Bavarian #176 (19xx)(APS Electronic).adf
/
Tetriz1
/
tetriz.docs
< prev
next >
Wrap
Text File
|
1988-08-09
|
21KB
|
526 lines
Page #1
OutLine of Documentation
1-3... This document has 3 pages relating to tetriz
4-6... Section on general programming tips
7-8... Section critizing poor programming efforts on Amiga
9 ... Greetings + Mailing Address
*************************************************************************
*************************************************************************
*************************************************************************
One - tetriz
*************************************************************************
*************************************************************************
*************************************************************************
Welcome to Amiga Tetriz by Andy Hook
These are some of the thoughts behind my release of this source code:
I've been programming for a while now, and in looking back,
I wish that I'd known, when I first started programming,
the tricks and shortcuts that I know and use now.
I guess learning may be a kind of snowball effect, and a
good push seems to sometimes get the ball rolling that much
faster.
Tetriz itself, I think tetriz is a good example of
addictive game design. The game operates under a rule
based system allowing you to anticipate the effects of
any action - before you make it... your own successes or
failures accumulate to spell your final outcome...the
game is crisp, bright. The components of the graphics,
sound and rules all stand out in bright contrast within
themselves, not mushy and vague like most games. The rules
in particular are meaningful within the scope of the game,
not capricious and arbitrary.
In regards to releasing "Tetriz" to the public domain.
Additionally I would like to encourage other developers
to breed good programmers, and to help out the community
at large rather than maliciously profiting off their own
"secret" technical knowledge in lieu of any ability to
come up with good product concepts.
Feel free to browse the source code, use it, learn from it.
Page #2
In tetriz I have attempted to teach in a certain way:
To *not* teach instruction opcodes, but to teach instruction
routines, or techniques. I believe that the programmer finds
the opcode to suit the logic operation, not visa versa.
To demonstrate the nitty-gritty of various technical aspects,
without relying on black-box style magical system functions.
My past experience as a novice M.L. programmer showed a personal
weakness in Amiga specific technical knowledge. I believe this
source code should demonstrate most technical aspects required for
a complete Amiga project. Another tremendous help now is the
new Amiga Techical Reference Manual.
A weakness, which I see in some other programmers, is their not
having a "mental-library" of approaches to any particular
algorithm.
I believe this is due to magazines focusing on the crudest aspects
of teaching Machine Code, the opcodes themselves, versus what to do
with them. Really there is no public avenue for a programmer to
become truly competent at any particular system.
(And I think this is a shame because I am sure that there are many
potential programmers who could easily blow me away...I mean if I
can learn to program - and I'm no shining example of intelligence -
then anybody should be able to learn to program)
I hope that you enjoy this source and that you write many wonderful
games for me to play!
If I get a positive reaction to this release I may write other
products for the public domain...(what the hell, it pays about the
same as my freelance work and its twice as fun).
Other topics I may cover: A public domain replacement for QBak,
covering aspects of DOS from AmigaDos to raw MFM.
You can mail me at:
Andy Hook
c/o The Computer Shop
3515 18th St SW Calgary Alta CANADA!
T2T-4T9
FAX: (403) 246-2861 (Daytime only please)
Online: (403) 246-1858 24hr (Andy Hook c/o sysop), name:AMUC,pass:SIG
Page #3
Notes:
You will find that I do not use macros or include files. My
language outputs macro-contents in an Aztek compatible stream
and typically for machine code I don't really find a need for
include files. I suggest the use of macros normally.
Note that I have used a very formal coding style, I would recommend
a less commented style for most normal programming jobs.
I don't suggest using Aztek.
I use Aztek by fault of the evil forces of Hydraulic Despotism [FH].
I do suggest using CED.
I wrote tetris during my "spare-time" (hah) after work, I wrote the
critical support routines first, once I had my mockup.
Page #4
*************************************************************************
*************************************************************************
*************************************************************************
Four - General Tips
*************************************************************************
*************************************************************************
*************************************************************************
Here is an example of what I consider to be good programming
practices:
;----------------------------------------------------------------------------
;
; SonyRoutine.asm © Mr. Good Code People Corp 1990 All Rights Reserved
;
; *** On a copyright notice there are no extra spaces, commas, periods
; or anything that might suggest that the copyright is not
; directly bound to the named object and the named creator.
; "All Rights Reserved" protects you; In Canada mere creation
; of a thing gives you implicit copyright, however I understand
; that you must declare your rights. Of course having rights
; depends solely on your ability to enforce them.
; You should talk to your lawyer and work through the laws in
; your state regarding copyrights.
include 'publics.i'
;
; This is an example of some good coding practices
; Passed:
; D0 = A Good Coding Practice Register
;
SonyRoutine
move.l d0,d1 ; D1 = My First Line
move.l SonyAlpha(pc,d0.w),d5 ; D5 = My Second Line
lea SonyVector(pc),a0 ; A0 = Another Line
move.l SonyMemory(pc),a1 ; A1 = Yet another line
cmp.l #0,a0 ; you can't "tst" a0
bne.s SonyRoutine200
moveq #40-1,d1 ; Show #,then -1 for dbf count
SonyRoutine100
move.l (a0)+,(a1)+ ; Lets Copy Something...
dbf d1,SonyRoutine100
SonyRoutine200
rts
SonyAlpha dc.l 1,2,3,4,5,6,7,8
SonyVector dc.l 0
SonyMemory dc.l 'DISK'
; end of routine.asm
;-----------------------------------------------------------------------------
Page #5
; Quick Comments on Above "Sony" Source Code
; When Labels are related, having the same header name like "Sony..."
; makes them easier to see when searching a debuggers symbol list.
; Having long form names like "Routine" versus "Rtn" makes it easier
; to remember what you are looking for, and what you are doing.
; Having comments always rigidly placed on a margin makes life much
; easier for quick scanning through code
; Use PC Relative Code, (keep code modules to less than 64 K)
; Don't put comments on the same lines as Labels
; Don't have comments more than one line long unless left justified.
; Comments don't go off the visible text editor screen to the right.
; When using fixed memory spaces, such as Amiga Hardware registers,
; index off of A6 or some other definately free register (this speeds
; up code tremendously, and reduces code size).
; Use bra.s moveq ect, unless your compiler optimizes automagically.
; Use Makefiles for MANX code, system takeover or not.
; When using MANX deal with the stupidity of 'publics' by putting
; them all in one header file.
; The first line of any code segment should be the name
; The last line of any code file should be the name
; This makes printing much easier
; Machine Code doesn't flow visually very well when not aligned, don't
; bother putting spaces at X if X is [ move.l (a0)+ X ,(a1)+ ]
; Sometimes when I have a temporary line I will space it over one
; from the left margin, versus actually tabbing it into a proper
; position, this helps me remove all debugging code later.
; Learn to type without watching what you see on the screen for
; feedback, Watching the screen slows you down to the speed of
; your editors output. (trust the audio and tactile cues...)
; Buy CED and MANX, buy ReSource, SEKA, RAW, CONVERTOR, AUDIOMASTER...
; Buy DPAINT3 (for easy animation of character graphics).
; (CED will prevent accidents like losing source due to crash while
; saving and is a phenomenal editor)
; You *must* have a hard-drive and at least 1 megabyte of memory
; to program commercially.
PAGE #6
; My only conceptual oriented suggestion: When the conceptual going
; gets tough, the tough modularize.... Any routine that becomes
; unwieldy...just make the unwieldy part into a subroutine. Remember
; what makes programmers great isn't that they can program...anybody
; can program, but programmers can INTEGRATE, using the massive
; inferential ability that all human minds have; and that computers
; (right now) don't.
; Writing Code is the easy part, with a little forethought a person
; can sit down and basically produce a stream of code, the major
; stumbling block is debugging. My suggestion is don't make bugs...
; but if you do here are some things you can do:
;
; Have a state-trace-debugger to freeze the machine (I wish).
;
; Write a fake-state-trace-debugger using 68xxx Trace Mode
; (have it interupt driven, and detect mouse to stop)
;
; Write some custom screen print routines to give you feedback
; on bugs, or even just general occurances.
;
; If you are not taking over the system, use MANX db.
;
; Some things I do:
;
; I find it's more useful for me to write buglists/things-to-do
; on small cards versus a whole sheet of paper.
;
; I use tables a lot in my code, versus mulu's or shifts.
; I write code for speed, not size; Amiga has tons of memory.
;
; On the Amiga I use $bfe001 and $dff180 a lot for debugging...
;
;ClassicalExample:
;1$ add.w #1,d0
; move.w d0,$dff180 ; Flash Screen
; btst #6,$bfe001 ; Wait till Mouse Pressed
; bne.s 1$
; rts
;
; I try to think as much as I can before actually attacking
; a project, this prevents design flaws. But sometimes I will
; force myself to start even if unprepared, this will catalyze
; my thought process to action and then I can sit back and think
; it through; kind of like zero-on-zero brainstorming.
;
; I try to bring my computer as close to my natural enviroment
; as possible; having a bed, bathroom, kitchen, soft huggable
; female person all within reach is very important.
; Exercise becomes important also.
;
; Keep on the edge of available tools, available software and
; latest news...Don't be afraid to read PC magazines.
;
; Learn as much as possible from other programmers around you,
; even if it is sometimes a humbling experience.
;
; If you're going to work for your first company:
;
; Make damn sure that you define to yourself and to them
; precisely what you expect out of the partnership.
; If you're not in a bargaining position you may give up
; a lot, but you should still be able to gain a lot
; (in terms of knowledge, although probably not in money).
PAGE #7
;*************************************************************************
;*************************************************************************
;Seven - Critiques
;*************************************************************************
;*************************************************************************
;*************************************************************************
Shadow Of the Beast
Pysgnosis of all Companies has the potential to put out the
best games, they finally got their programming act together
and combined with their tremendous graphics are now putting
out programs that run fast enough to play and look dynamic.
Yet they are still completely missing "minor" elements like
consistency of topic, atmosphere, theme and playability....
And the time delays here are something else also. If they
used a simple sector based DMA driven disk read they could
probably get it so that you wouldn't notice the load lag.
I would say that it is the best arcade style game out for
the Amiga so far, in the Sword of Sodan vein. With the
T-Shirt thrown in its a good buy. (PS Boot Disk #3 of S of S).
Aztek MANX Assembler V4.x
Terrible, really quite bad, a really secondhand effort.
Incompatible, cryptic, buggy, slow, rudimentary.
Annoying because it has such potential. To its benefit
however it does offer a standard enviroment (ie assembling,
linking, includes, and CLI compatible), even with its
drawbacks, that have made it my solution to assembly language
programming for the past year. Now I've just switched to
genim2 and am just realizing that Aztek wasn't very good.
QuarterBack
Poor: Difficult to find large
files that distort disk count. Does not offer compression,
Does not holographically record master data to each disk
thus if disk #1 goes bad entire batch is lost. Has option
(which is default) to turn off error checking.
However is the only backup solution available at the moment.
CPR
Code Probe By Lattice has got to win the award for most
stupid interface. Those flickery windows have got to be some
sort of acid burn test right?
I suggest Aztek SDB instead, cept its incompatible with the
known universe.
WORDPERFECT
Arg....!
I'll bet that given one week on the Word Perfect Source
code I could get that thing to run an order of magnitude
faster just by fixing the screen i/o; replacing it with
custom 1 bitplane overscanned copperlist and text routines.
Still blows away most other Word Processors.
PAGE #8
POPULOUS
Ok graphics, nice integrated concept, where's the game?
Seems a bit slow, where's the blitter?
What would be really cool is if the lumpen-folk built
around roads, which could only be on flat land, not just
simply houses...oh well, its still an ok game.
Lack of Definitive Desk Top Publishing Tools
Lack of Definitive Accounting Packages
Lack of Definitive Spread Sheet Packages
What really bothers me about most the products, aside from
Shadow of the Beast is that the Developers know about conventional
programming practices, but do not understand even the simplest
things about interface design. I personally dislike having to
switch between mouse, keyboard, joystick within the frame of
one mental operation.
I also think that many of these products are compromised by trying
to follow the letter of the Amiga Workbench interface designs,
without thought to the original spirit; which is to make a
standard interface, which is visible, fun, fast and easy to use.
CPR is probably the worst example of all the above, the Aztek
SDB is a beautiful piece of code, its a real credit to its developers
John3 could learn a lot by looking at that simple, elegant interface.
I have to really say that I can't really be so critical. The
tools which most these developers have to use are pretty bad, and
everybody is so busy making money that nobody stops long enough
to develop or market adequate tools themselves.
And Commodore itself has been less than supportive of its
Developer Community...Most these Developers are working in greedy
isolation; clutching their feeble routines close to heart, one
protruding eye bleakly warding off possible threats.
Good Stuff:
Dungeon Master
Sublime, completely sublime. The animation sucks, but the
game is just phenomonal. The best game ever made.
ReSource, DevPac, CED, CMON, - Sublime development tools.
Dragons Lair II
Incredible, actually playable, branch points at different
places in the game completely destroy the myth of a single
memorized solution. I find myself gasping as I try to
out-guess the next screen. I love it. A complete contrast to
SpaceAce which is basically an attempt to tear money out
of the market (SpaceAce was by David Fester-ing wound).
(DL II: Singes Revenge, is by Randy Linden)
Matt Dillon, the guy is so prolific, that he counts as a good thing
in himself. The quality and quantity of his work is
stupendous, and the fact that he releases source code is
the coup de grace.
(Actually there are many people who I unabashedly admire, such as
Stephen Vermulen, Fred Fish, Chris Draco Grey, Randy Linden...)
PAGE #9
;*************************************************************************
;*************************************************************************
;*****************,*******************************************************
;Eight - Communiques
;*************************************************************************
;*************************************************************************
;*************************************************************************
Please don't send me software that I do not have legal permission
to use without pre-purchase.
The Source Code in Tetris is entirely my own work. I am no longer
owned by a corporate think-tank, and none of the work here compromises
any technologies that they own. You are free to disseminate Tetris
as widely as possible. I have no malicious intent against any of
the many previous companys I have worked for. My attitude is that
I can simply outperform any individual or corporate group that has
decided to (for example) not pay me, or not meet contract demands.
Honor is very important to me in an industry where so many people
seem dishonorable.
I am not responsible for any problems you have with Tetris, Tetris
is entirely a public domain work, and as such I am not liable for
any bugs Tetris has or deaths that Tetris may cause in your family.
If you find any bugs in Tetris please fix them and send me a copy.
If you have the impetuous please add a dancing lego-man to tetris.
I'm always looking for people to work for me, or people for whom I
could work. If you're interested or interesting, or you just have
some questions feel free to send me a message.
I have all kinds of interesting projects and subroutines.
Unlike othe people (whom we won't mention here) I'm always willing to
discuss my ideas on programming strategies, politics, and money.
(Of course I can't discuss areas related to current contract work).
I have a group of people I am now working with, we are a loose
collective of programmers, with experience and contacts in the
industry, and I am always willing to put you in touch with the
company or group best suited to releasing your products. I might
even be willing to help you write a project, for free if its
a purely technical issue where I can just code your solution.
If anything I think I can suggest abstract approaches for general
program design, which I consider to be my forte (You must sign
a non-disclosure with me however, before discussing any of your
ideas; this protects you).
I also love to get demos and utilities! One of the projects which
I've wanted to do for about 3 years now is a vector-tilemap game,
more commonly known as vectorballs. A kind of 3D Emerald Mines.
I played around with the math in Vortex a bit (see the very first
title page for example) and I think I could produce an entire game
around the concept. So I'm always happy to get demos which
demonstrate particular approaches like that. My favorites are the
RED-SECTOR vectorballs demo and I also like the PARANOIMIA vector-
ball-text demo (although I think PARANOMIA/QUARTEX are losers for
selling cracked games).
If you have any demos, utilities or source code to exchange with
me you can mail me at this address:
Andy Hook
c/o The Computer Shop
3515 18th St Sw
Calgary, Alta, CANADA!!!!
T2T-4T9
Yours Truly
Anselm Hook
P.S. Although LLaama soft may recomend Godel Esher Bach I would suggest
Metamagical Themas Jeff!
Appendum Feb 18 1990:
I tried to fix 2 bugs, 1) With a 68030, Kick 1.3, Custom Font the
tetris text is reported to be bad. 2) Workbench support.